// 简单的启动脚本，用于启动上传服务器
const { spawn } = require('child_process');
const path = require('path');

// 定义日志函数
function log(level, message, data) {
  const timestamp = new Date().toISOString();
  const prefix = `[${timestamp}] [${level.toUpperCase()}] [start.js]`;
  
  if (data) {
    console.log(`${prefix} ${message}`, data);
  } else {
    console.log(`${prefix} ${message}`);
  }
}

log('info', '正在启动文件上传服务器...');

// 获取启动参数
const nodeArgs = [];
const serverArgs = [];

// 检查是否有调试参数
if (process.argv.includes('--debug')) {
  log('debug', '启用调试模式');
  nodeArgs.push('--inspect');
  serverArgs.push('--log-level=debug');
}

log('debug', '启动参数:', { nodeArgs, serverArgs: [...serverArgs, path.join(__dirname, 'index.js')] });

// 启动index.js
const serverProcess = spawn('node', [...nodeArgs, path.join(__dirname, 'index.js'), ...serverArgs], {
  stdio: 'inherit',
  env: { ...process.env }
});

log('debug', `子进程已启动，PID: ${serverProcess.pid}`);

serverProcess.on('error', (err) => {
  log('error', '启动服务器失败:', err);
});

serverProcess.on('exit', (code, signal) => {
  if (code !== null) {
    log('info', `服务器进程已退出，退出码: ${code}`);
  } else if (signal !== null) {
    log('info', `服务器进程被信号终止: ${signal}`);
  }
});

process.on('SIGINT', () => {
  log('info', '收到SIGINT信号，正在关闭服务器...');
  serverProcess.kill('SIGINT');
  process.exit(0);
});

process.on('SIGTERM', () => {
  log('info', '收到SIGTERM信号，正在关闭服务器...');
  serverProcess.kill('SIGTERM');
  process.exit(0);
});

process.on('uncaughtException', (err) => {
  log('error', '未捕获的异常:', err);
  serverProcess.kill('SIGTERM');
  process.exit(1);
});